const { app, BrowserWindow, Tray, ipcMain, dialog, nativeTheme, nativeImage, screen, Menu } = require('electron');
const fs = require('fs');

let configData; // 用于存储从 config.json 读取的数据
let mainWindow;
let floatingBallWindow;

function createWindow() {
  readConfig();
}

function readConfig() {
  // 读取并解析 config.json
  fs.readFile('./resources/config.json', 'utf-8', (err, data) => {
    if (err) {
      console.error('Error reading config file:', err);
      return;
    }
    try {
      configData = JSON.parse(data);
    } catch (parseErr) {
      console.error('Error parsing config file:', parseErr);
      return;
    }

    if (configData.iframeUrl == "") {
      const errorMessage = '请填写配置文件\\resources\\config.json后再运行';
      // 显示错误提示并关闭窗口
      showErrorAndCloseWindow(errorMessage);
    } else {
      createMainWindow();
      createFloatingBallWindow();
    }

  });
}

function createMainWindow() {
  mainWindow = new BrowserWindow({
    width: parseInt(configData.width),
    height: parseInt(configData.height),
    frame: false, // 无边框
    alwaysOnTop: true, // 置顶
    // transparent: true, // 透明背景
    // resizable: false, // 不可调整大小
    show: false, // 初始时隐藏窗口
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: false,
    },
  });

  mainWindow.loadFile('index.html');

  mainWindow.webContents.on('did-finish-load', () => {
    // 发送配置信息到渲染进程
    mainWindow.webContents.send('config-data', configData);
    mainWindow.webContents.send('window-ready'); // 通知渲染进程，窗口已经加载完毕
  });

  // 监听右键菜单事件
  mainWindow.webContents.on('context-menu', (e, params) => {
    const menu = Menu.buildFromTemplate([
      { label: '复制', role: 'copy' },
      { label: '粘贴', role: 'paste' },
      { label: '全选', role: 'selectAll' },
    ]);
    menu.popup({ window: mainWindow });
  });

  triggerThemeUpdate(); // 手动触发主题更新

  // mainWindow.webContents.openDevTools();
}

function createFloatingBallWindow() {
  floatingBallWindow = new BrowserWindow({
    width: 50, // 悬浮球的宽度
    height: 76, // 悬浮球的高度
    frame: false, // 无边框
    alwaysOnTop: true, // 置顶
    transparent: true, // 透明背景
    resizable: false, // 不可调整大小
    movable: true, // 可移动
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: false,
    },
  });

  // 设置悬浮球窗口的置顶级别为 'screen-saver'，确保它在大多数窗口之上
  floatingBallWindow.setAlwaysOnTop(true, 'screen-saver');

  //通过获取用户屏幕的宽高来设置悬浮球的初始位置
  const { left, top } = { left: screen.getPrimaryDisplay().workAreaSize.width - 160, top: screen.getPrimaryDisplay().workAreaSize.height - 160 }
  floatingBallWindow.setPosition(left, top) //设置悬浮球位置

  // 加载包含自定义图片的 HTML 文件
  floatingBallWindow.loadFile('floating-ball.html');

  // 监听悬浮球窗口的点击事件
  floatingBallWindow.webContents.on('did-finish-load', () => {
    floatingBallWindow.webContents.on('dom-ready', () => {
      floatingBallWindow.webContents.executeJavaScript(`
        document.addEventListener('click', () => {
          window.ipcRenderer.send('open-main-window');
        });
      `);
    });
  });

  // 处理悬浮球移动事件
  ipcMain.on('move-floating-ball', (event, dx, dy) => {
    const [x, y] = floatingBallWindow.getPosition();
    floatingBallWindow.setPosition(x + dx, y + dy);
    // 固定窗口的宽度和高度
    floatingBallWindow.setSize(50, 76);
  });

  // 处理右键菜单事件
  ipcMain.on('show-context-menu', (event, position) => {
    const menu = Menu.buildFromTemplate([
      { label: '打开窗口', click: () => {
        if (mainWindow) {
          mainWindow.show();
        }
      } },
      { label: '关闭窗口', click: () => {
        if (mainWindow) {
          mainWindow.hide();
        }
      } },
      { label: '初始化窗口', click: () => {
        if (mainWindow) {
          mainWindow.setSize(parseInt(configData.width), parseInt(configData.height));
          // 这里可以设置初始位置，例如居中
          const { width, height } = screen.getPrimaryDisplay().workAreaSize;
          const x = (width - parseInt(configData.width)) / 2;
          const y = (height - parseInt(configData.height)) / 2;
          mainWindow.setPosition(x, y);
        }
      } },
      { label: '退出', click: () => {
        app.quit();
      } }
    ]);
    menu.popup({ window: floatingBallWindow, x: position.x, y: position.y });
  });
}

app.whenReady().then(() => {
  createWindow();

  app.on('activate', function () {
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit();
});

// 接收来自渲染进程的消息以控制窗口
// 窗体动作
ipcMain.on('window-action', (event, action) => {
  const win = BrowserWindow.fromWebContents(event.sender);
  switch (action) {
    case 'minimize':
      win.minimize();
      break;
    case 'maximize':
      win.isMaximized() ? win.unmaximize() : win.maximize();
      break;
    case 'close':
      // win.close();
      app.quit();
      break;
  }
});

// 置顶功能
ipcMain.on('toggle-always-on-top', () => {
  mainWindow.setAlwaysOnTop(!mainWindow.isAlwaysOnTop());
});

// 处理点击悬浮球事件
ipcMain.on('open-main-window', () => {
  if (mainWindow) {
    mainWindow.show();
  }
});

// 处理关闭主窗口事件
ipcMain.on('close-main-window', () => {
  if (mainWindow) {
    mainWindow.hide();
  }
});

nativeTheme.on('updated', () => {
  triggerThemeUpdate();
});

// 在合适的位置手动触发一次主题更新
const triggerThemeUpdate = () => {
  const systemTheme = nativeTheme.shouldUseDarkColors ? 'dark' : 'light';
  switch (configData.theme) {
    case 'dark':
      mainWindow.webContents.send('systemTheme', 'dark');
      break;
    case 'light':
      mainWindow.webContents.send('systemTheme', 'light');
      break;
    case 'auto':
      mainWindow.webContents.send('systemTheme', systemTheme);
      break;
    default:
      mainWindow.webContents.send('systemTheme', systemTheme);
  }
};

function showErrorAndCloseWindow(message) {
  dialog.showMessageBox({
    type: 'error',
    title: '错误',
    message: message,
    buttons: ['确定']
  }).then(() => {
    app.quit();
  });
}

